#ifndef GAMEROOM_H
#define GAMEROOM_H

#include <QWidget>
#include <QTimer>
#include <QSound>

// 枚举蛇的方向
enum class SnakeDirect{
    UP=0,
    DOWN,
    LEFT,
    RIGHT
};

class GameRoom : public QWidget
{
    Q_OBJECT
public:
    explicit GameRoom(QWidget *parent = nullptr);

    // 重写绘图事件
    void paintEvent(QPaintEvent *event);

    void moveUp(); // 蛇向上移动
    void moveDown(); // 蛇向下移动
    void moveLeft(); // 蛇向左移动
    void moveRight(); // 蛇向右移动

    bool checkFail(); // 判断游戏是否结束

    void createNewFood(); // 创建食物

    void setTimeout(int timeout) {
        moveTimeout = timeout;
    }

    void keyPressEvent(QKeyEvent* event);

private:
    const int kSnakeNodeWidth=30;  // 表示蛇身体节点的宽度
    const int kSnakeNodeHeight=30; // 表示蛇身体节点的高度
    const int kDefaultTimeout=200; // 表示蛇的默认移动速度

    QList<QRectF> snakeList; // 表示贪吃蛇链表
    QRectF foodRect; // 表示食物节点

    SnakeDirect moveDirect=SnakeDirect::UP; // 设置蛇的移动方式是默认向上
    QTimer *timer; // 定时器

    bool isGameStart=false; // 表示是否开始游戏

    QSound *sound;

    int moveTimeout = kDefaultTimeout;

};

#endif // GAMEROOM_H
